1. Technical Field
This invention generally relates to object-oriented programming and more specifically relates to an object-creation mechanism in object-oriented environments.
2. Background Art
The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago.
Computer systems typically include operating system software that controls the basic function of the computer, and one or more software application programs that run under the control of the operating system to perform desired tasks. For example, a typical IBM Personal Computer may run the OS/2 operating system, and under the control of the OS/2 operating system, a user may execute an application program, such as a word processor. As the capabilities of computer systems have increased, the software programs designed for these high performance systems have become more powerful. Additionally, software development costs have continued to rise because more powerful and complex programs take more time, and hence more money, to produce.
One way in which the performance of application software programs has been improved while the associated development costs have been reduced is by using object-oriented programming concepts. The goal of using object-oriented programming is to create small, reusable sections of program code known as "objects" that can be quickly and easily combined and re-used to create new programs. This is similar to the idea of using the same set of building blocks again and again to create many different structures. The modular and re-usable aspects of objects will typically speed development of new programs, thereby reducing the costs associated with the development cycle. In addition, by creating and re-using a group of well-tested objects, a more stable, uniform, and consistent approach to developing new computer programs can be achieved.
Typically, object-oriented software programs or processes create and use objects to accomplish the required or desired goals of the application software. Most software processes will create an object or group of objects and then use those objects during the lifetime of that particular process. The objects that accomplish the software processes typically interact with other objects as part of the process. For example, a "client object" is an object that will request a certain service from another object, known as a "server object." The server object will receive the request from the client object and take appropriate steps to fill the client object's request.
While the introduction and implementation of object-oriented programming concepts has been beneficial, the use of object-oriented concepts is not without certain limits and, occasionally, undesirable side effects. For example, whenever a new object is to be created, the various configuration or initialization elements or attributes for the new object must be determined and set, typically according to the memory management requirement of the memory location where the new object is to be stored. Each memory management unit or storage area, known as a "container," will generally have a unique set of requirements for the objects that are to be stored in that container.
Since each new object is created by another, existing object, typically known as a "factory" object, the factory object must constantly be aware of the object configuration and initialization requirements for all possible types of objects that can be stored in a given container. If a number of objects with different configuration and initialization requirements are to be created in sequence, the process of verifying the configuration of the underlying attributes for a container for each of the objects can consume a significant amount of time. In addition, the factory object itself may need to be reconfigured to support each new container configuration requirement as new configuration requirements are developed. This means that every time a new type of container is created or configured, or if the attributes for an existing container are modified, then the factory object must be updated to reflect this change. This continual updating and reconfiguring of the factory object to support constantly changing container memory storage requirements is time-consuming and, if not done correctly, can possibly lead to incompatibilities and system-level errors.
Without a mechanism for more easily and flexibly configuring objects in object-oriented computer systems, users will be forced to accept an unnecessary amount of overhead when configuring and using new objects and containers in an object-oriented environment. Therefore, what is needed is an improved mechanism for configuring new objects in an object-oriented programming environment that can reduce the existing system overhead, increase reliability, and eliminate the possibility for configuration error that presently reduces efficiency and ease-of-use in object-oriented computer systems.